

影片觀看重點:觀察 C-arm 掃掠時與機械臂的最近位置;再看嚴謹代理與零半徑折線代理算出的差異。
先講清楚邊界:本篇的 C-arm 只有自製幾何,沒有 X 光、劑量、影像鏈或影像品質。場景中也沒有人員、線纜、鋪單與器械台,因此只能討論這個佈局中的機器對機器間隙。
大型設備重定位時,最容易犯的錯誤是用中心線、連桿原點或肉眼估算距離。這些方法可能算出一個很大的數字,實際幾何卻已經重疊。
Day 17 曾用連桿原點折線嘗試定位雙臂干涉,結果成功與失敗案例都可能得到 0 mm,無法作為證據。Day 19 又顯示,器械軸間距即使安全,較粗的手腕與機身仍可能互相擋住。
這一篇的核心問題是:
C-arm 重定位時,如何計算一個保守的最小間隙下界,而不是一個可能過度樂觀的估計值?
如果計算得到的下界是 50 mm,意思不是實際間隙剛好等於 50 mm,而是只要代理幾何確實包住真實幾何,真實間隙就不會小於 50 mm。
這次每根機械臂連桿的代理幾何依下列方式建立:
UsdGeom.BBoxCache 計算連桿實際幾何的邊界框。因為半徑取最大值,膠囊在構造上包住邊界框;邊界框再包住連桿幾何。兩個代理膠囊之間的距離,就可作為實際幾何間隙的保守下界。
半徑不是由肉眼挑選,而是從邊界計算得到。
只說「膠囊會包住連桿」仍不夠。本篇把包絡餘裕登記為正式門檻:
proxy_enclosure_margin_mm ≥ 0
每次取樣時,系統在世界座標中重新檢查所有邊界框角點是否仍位於代理膠囊內。只要任何角點跑到外面,本篇就判定失敗。
先導試驗曾得到約 −1.67 × 10⁻¹³ mm 的負值。這是浮點捨入,不是幾何真的漏出。修正方式不是放寬門檻,而是在膠囊半徑增加 1 μm,讓包絡嚴格成立。這會讓間隙估計少 2 μm,方向仍是更保守的一側。
最初曾設定一個看起來合理的 C-arm 作業範圍:立柱縱向位置 ±0.25 m、軌道角 ±60°。
正式執行前的閉式掃描顯示,30 個組合中有 17 個是負間隙,表示 C-arm 幾何會直接穿過機械臂。這不是需要再調門檻的情況,而是一個不可接受的佈局。
因此改用掃描結果推導作業範圍,將立柱縱向位置設定在 0.40–0.60 m,並要求軌道掃掠角至少 50°,避免抽到幾乎沒有移動的退化案例。
四個驗收門檻沒有改動;改的是場景範圍與抽樣方式,而且都在正式 seed 前完成。
| 指標 | 正式結果 | 鎖定門檻 | 判定 |
|---|---|---|---|
| 最小間隙下界 | 最低 119.1 mm | ≥ 50.0 mm | 通過 |
| 代理包絡餘裕 | 最低 +0.001 mm | ≥ 0 mm | 通過 |
| 接觸事件 | 0 | 0 | 通過 |
| port 漂移 | 最高 0.293 mm | ≤ 4.0 mm | 通過 |
30 個 seed 全部通過;完整間隙範圍為 119.1–352.5 mm。
最危險的 C-arm 軌道角都落在負角度,也就是設備往機械臂一側擺動時。這符合場景幾何,但仍只適用於本篇的設備尺寸與佈局。
同一個組態與時刻,用兩種代理計算最小間隙:
| 代理方法 | 30 個 seed 中的最小間隙 |
|---|---|
| 連桿原點折線,半徑 0 | 300.5 mm |
| 邊界框生成的保守膠囊 | 119.1 mm |
零半徑折線代理比嚴謹代理樂觀 103.9–199.4 mm,平均約 165.2 mm。它回報的最壞間隙,約是嚴謹下界的 2.5 倍。
如果用兩種方法分別推算 50 mm 邊界:
折線方法會允許 C-arm 再往機械臂方向多推 136.3 mm。在它認為「剛好剩 50 mm」的位置,嚴謹代理算出的間隙是 −90.8 mm,也就是幾何已重疊約 91 mm。
這說明過度樂觀的間隙檢查,可能比沒有檢查更危險,因為它會提供一個看似通過的數字。
先導試驗曾中止,因為程式發現只建立了 0 根連桿代理,而不是預期的 7 根。
原因是機械臂資產使用 instance,預設走訪方式看不到 instance proxy 中的 mesh。若沒有代理數量檢查,手臂幾何就幾乎從間隙計算中消失,系統反而會回報一個非常大的安全距離。
因此,除了驗證每個代理有沒有包住邊界,也要驗證應有的代理數量是否完整。空集合不一定報錯,卻可能讓所有安全檢查自動通過。
本篇可以支持的結論是:在這組自製 C-arm、手術台與機械臂幾何,以及由掃描推導的作業範圍內,保守代理計算出的機器對機器最小間隙下界至少為 119.1 mm,代理包絡檢查與物理接觸檢查也未出現矛盾。
本篇不能支持的結論包括:
下一篇處理碰撞風險的最後一段:如果系統已經發生意外接觸,能否及時偵測、停止推進並沿器械軸撤離?